namespace NFreeMarker.Template.Utility
{
	/**
	 * Frequently used constant {@link TemplateModel} values.
	 * 
	 * <p>These constants should be stored in the {@link TemplateModel}
	 * sub-interfaces, but for bacward compatibility they are stored here instead.
	 * Starting from FreeMarker 2.4 they should be copyed (not moved!) into the
	 * {@link TemplateModel} sub-interfaces, and this class should be marked as
	 * deprecated.</p>
	 * 
	 * @version $Id: Constants.java,v 1.2 2004/11/28 12:58:34 ddekany Exp $
	 */
	public class Constants
    {
	    public static readonly ITemplateBooleanModel True = TemplateBooleanModel.True;
        public static readonly ITemplateBooleanModel False = TemplateBooleanModel.False;
        //public static readonly ITemplateScalarModel EMPTY_STRING = (TemplateScalarModel) TemplateScalarModel.EMPTY_STRING;
        public static readonly ITemplateNumberModel Zero = new SimpleNumber(0);
	    public static readonly ITemplateNumberModel One = new SimpleNumber(1);
	    public static readonly ITemplateNumberModel MinusOne = new SimpleNumber(-1);
	    
        //public static final TemplateModelIterator EMPTY_ITERATOR = new TemplateModelIterator() {

        //    public TemplateModel next() throws TemplateModelException {
        //        throw new TemplateModelException("The collection has no more elements.");
        //    }

        //    public boolean hasNext() throws TemplateModelException {
        //        return false;
        //    }
	        
        //};

        //public static final TemplateCollectionModel EMPTY_COLLECTION = new TemplateCollectionModel() {

        //    public TemplateModelIterator iterator() throws TemplateModelException {
        //        return EMPTY_ITERATOR;
        //    }
	        
        //};
	    
        //public static final TemplateSequenceModel EMPTY_SEQUENCE
        //        = new TemplateSequenceModel() {
	    
        //    public TemplateModel get(int index) throws TemplateModelException {
        //        return null;
        //    }
	    
        //    public int size() throws TemplateModelException {
        //        return 0;
        //    }
	        
        //};
	    
        //public static final TemplateHashModelEx EMPTY_HASH = new TemplateHashModelEx() {

        //    public int size() throws TemplateModelException {
        //        return 0;
        //    }

        //    public TemplateCollectionModel keys() throws TemplateModelException {
        //        return EMPTY_COLLECTION;
        //    }

        //    public TemplateCollectionModel values() throws TemplateModelException {
        //        return EMPTY_COLLECTION;
        //    }

        //    public TemplateModel get(string key) throws TemplateModelException {
        //        return null;
        //    }

        //    public boolean isEmpty() throws TemplateModelException {
        //        return true;
        //    }
	        
        //};
	    
	}
}